#ifndef __MVP_LP_MODULE_H__
#define __MVP_LP_MODULE_H__

#include "mvdef.h"

#define LPM_BUF_MAX_LEN     1024
#define LPM_MSG_MAX_LEN     992
#define LPM_CMD_MAX_LEN     15

#define VHEAD               0x7F    // 帧头           
#define VNOTIFY             0x01    // notify
#define VREQUEST            0x02    // request
#define VRESPONSE           0x03    // response
#define VNUL                0x00    // 敏感命令确认         
#define VACK                0x06    // 确认                 
#define VCRIT               0x0A    // 请求进入临界         
#define VOUTCRIT            0x0B    // 请求退出临界         
#define VREADY              0x0D    // ready信号            
#define VAOV                0x10    // 请求进入AOV（未确认）
#define VREBOOT             0x11    // 请求重启             
#define VREBOOTA            0x12    // 请求设备重启         
#define VPOWEROFF           0x13    // 请求关机             
#define VPOWEROFFA          0x14    // 请求设备关机         
#define VNAK                0x15    // 否认                 
#define VSYNC               0x16    // 同步（复用为看门狗）  

#define VDPRINT             0x00    // 数据帧类型-可视文本 
#define VDBIN               0x01    // 数据帧类型-二进制   
#define VDJSON              0x02    // 数据帧类型-JSON     
#define VDBASE64            0x03    // 数据帧类型-Base64   

typedef struct _lpm_param {
    mv_s32_t    s32_firmware_type;
    mv_s32_t    s32_lpm_uart_baud;
    mv_v8_t     av8_lpm_dev[64];
}MVP_LPM_PARAM_T;

typedef struct _lpm_data {
    mv_u8_t     u8_act;
    mv_u8_t     u8_data_type;
    mv_u16_t    u16_data_len;
    mv_u16_t    u16_remain_data_len;
    mv_v8_t     av8_cmd [LPM_CMD_MAX_LEN];
    mv_u8_t     au8_data[LPM_MSG_MAX_LEN];
}MVP_LPM_DATA_T;

mv_s32_t  mvp_lpm_init(MVP_LPM_PARAM_T *pst_param);
mv_s32_t  mvp_lpm_uninit();
mv_void_t mvp_lpm_recv_cb_set(mv_s32_t(*pf_recv_cb)(mv_v8ptr_t pv8_data, mv_s32_t s32_len));
mv_s32_t  mvp_lpm_data_send_act(mv_u8_t u8_act);
mv_s32_t  mvp_lpm_data_send(MVP_LPM_DATA_T *pst_data);

typedef enum _lpm_msg_queue_id {
    LPM_MSG_QID_MVIPC   =  0,
    LPM_MSG_QID_MVP        ,
    LPM_MSG_QID_MAX         ,
}MVP_LPM_MSG_QUEUE_ID_E;

mv_s32_t  mvp_lpm_msg_queue_init(mv_u8_t u8_qid);
mv_s32_t  mvp_lpm_msg_queue_uninit(mv_u8_t u8_qid);
mv_s32_t  mvp_lpm_msg_queue_stash(mv_u8_t u8_qid, MVP_LPM_DATA_T *pst_data);
mv_s32_t  mvp_lpm_msg_queue_pop  (mv_u8_t u8_qid, MVP_LPM_DATA_T *pst_data);

#endif